package dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;

import entity.SolicitudBD;

public class SolicitudDAO extends DAO{
	
	public SolicitudDAO(){}
	
	public List<SolicitudBD> getSolicitudesPendientes() throws Exception{
		List<SolicitudBD> solicitudesPendientes = null;
		
		String qObtenerSolicitudesPendientes = "select * from solicitud ";//where tipo = 'Alta' and estado = 'Pendiente'";
		
		try {
			ResultSet rs = super.getiConexion().ejecutarPreparedStatement(qObtenerSolicitudesPendientes);
		
			while(rs.next()){
				if(solicitudesPendientes == null)
					solicitudesPendientes = new LinkedList<SolicitudBD>();
				SolicitudBD tmpSolicitudBD = new SolicitudBD();
				tmpSolicitudBD.setCampaniaBD(new CampaniaDAO().getCampaniaById(rs.getInt("id_campania")));
				tmpSolicitudBD.setConceptoBD(new ConceptoDAO().getConceptoById(rs.getInt("id_concepto")));
				tmpSolicitudBD.setEmpleadoBD(new EmpleadoDAO().getEmpleadoById(rs.getInt("id_empleado")));
				tmpSolicitudBD.setEmpresaClienteBD(new EmpresaDAO().getEmpresaById(rs.getInt("id_empresa")));
				tmpSolicitudBD.setEstado(rs.getString("estado"));
				tmpSolicitudBD.setFecha_cierre(rs.getDate("fecha_cierre"));
				tmpSolicitudBD.setFecha_emision(rs.getDate("fecha_emision"));
				tmpSolicitudBD.setId_solicitud(rs.getInt("id_solicitud"));
				tmpSolicitudBD.setObservaciones(rs.getString("observaciones"));
				tmpSolicitudBD.setPrecio(rs.getFloat("precio"));
				tmpSolicitudBD.setTipo(rs.getString("tipo"));
				solicitudesPendientes.add(tmpSolicitudBD);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return solicitudesPendientes;
	}

	public List<String> getConceptosNroCorto() throws Exception{
		List<String> retorno = null;
		
		String query = "select distinct codigo_concepto from concepto where tipo= 'numero_corto'";
		
			ResultSet rs = super.getiConexion().ejecutarPreparedStatement(query);
			while(rs.next()){
				if(retorno == null)
					retorno = new LinkedList<String>();
				retorno.add(rs.getString("codigo_concepto"));
			}
			return retorno;
	}

	public List<SolicitudBD> getSolicitudesFiltradas(String cliente,
			String numCorto, String estado, Date fechaDesde, Date fechaHasta) throws Exception {
		List<SolicitudBD> solicitudesPendientes = null;
		
		String qjoin ="",qwhere =" where 1=1 ";
		//convertimos la fecha a sqldate
		java.sql.Date sqlfechaDesde = new java.sql.Date(fechaDesde.getTime());
		java.sql.Date sqlfechaHasta = new java.sql.Date(fechaHasta.getTime());
			
		if(! cliente.equalsIgnoreCase("TODOS")){
			qjoin+= " join empresa on empresa.id_empresa = s.id_empresa ";
			qwhere+=" and empresa.razon_social='"+ cliente +"' ";
		}
		if(! numCorto.equalsIgnoreCase("TODOS")){
			qjoin+= " join concepto on concepto.id_concepto = s.id_concepto ";
			qwhere+=" and concepto.codigo_concepto='"+ numCorto+"' ";
		}
		if(! estado.equalsIgnoreCase("TODOS")){
			qwhere+=" and estado='"+ estado+"'";
		}
		qwhere+=" and fecha_emision between '" + sqlfechaDesde  + "' and '"  + sqlfechaHasta +"'";

		String qObtenerSolicitudesPendientes = "select s.id_solicitud, s.id_concepto, s.id_empresa, s.id_campania,s.fecha_emision, s.id_empleado, s.estado, s.fecha_cierre, s.precio, s.observaciones, s.tipo from solicitud s " + qjoin +qwhere;//where tipo = 'Alta' and estado = 'Pendiente'";
		
			ResultSet rs = super.getiConexion().ejecutarPreparedStatement(qObtenerSolicitudesPendientes);
		
			while(rs.next()){
				if(solicitudesPendientes == null)
					solicitudesPendientes = new LinkedList<SolicitudBD>();
				SolicitudBD tmpSolicitudBD = new SolicitudBD();
				tmpSolicitudBD.setCampaniaBD(new CampaniaDAO().getCampaniaById(rs.getInt("id_campania")));
				tmpSolicitudBD.setConceptoBD(new ConceptoDAO().getConceptoById(rs.getInt("id_concepto")));
				tmpSolicitudBD.setEmpleadoBD(new EmpleadoDAO().getEmpleadoById(rs.getInt("id_empleado")));
				tmpSolicitudBD.setEmpresaClienteBD(new EmpresaDAO().getEmpresaById(rs.getInt("id_empresa")));
				tmpSolicitudBD.setEstado(rs.getString("estado"));
				tmpSolicitudBD.setFecha_cierre(rs.getDate("fecha_cierre"));
				tmpSolicitudBD.setFecha_emision(rs.getDate("fecha_emision"));
				tmpSolicitudBD.setId_solicitud(rs.getInt("id_solicitud"));
				tmpSolicitudBD.setObservaciones(rs.getString("observaciones"));
				tmpSolicitudBD.setPrecio(rs.getFloat("precio"));
				tmpSolicitudBD.setTipo(rs.getString("tipo"));
				solicitudesPendientes.add(tmpSolicitudBD);
			}
		return solicitudesPendientes;
	}

}
